package api

import (
	customererror "backend/global"
	"net/http"

	"github.com/gin-gonic/gin"
)

// 响应结构体
type Response struct {
	ErrorCode int         `json:"error_code"` // 自定义错误码
	Data      interface{} `json:"data"`       // 数据
	Message   string      `json:"message"`    // 信息
}

// Success 响应成功 ErrorCode 为 0 表示成功
func Success(c *gin.Context, data interface{}) {
	c.JSON(http.StatusOK, Response{
		0,
		data,
		"ok",
	})
}
func ServerError(c *gin.Context, err interface{}) {
	msg := "Internal Server Error"
	if gin.Mode() != gin.ReleaseMode {
		if _, ok := err.(error); ok {
			msg = err.(error).Error()
		}
	}
	FailByError(c, customererror.InternalServer(msg))
}

func Fail(c *gin.Context, httpCode int, errorCode int, msg string) {
	c.JSON(httpCode, Response{
		errorCode,
		nil,
		msg,
	})
	c.Abort()
}

// FailByError 失败响应 返回自定义错误的错误码、错误信息
func FailByError(c *gin.Context, error error) {
	v, ok := error.(*customererror.Error)
	if ok {
		Fail(c, v.HttpCode(), v.ErrorCode(), v.Error())
	} else {
		Fail(c, http.StatusBadRequest, customererror.DEFAULT_ERROR, v.Error())
	}
}
